package com.landlord.project;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class LandlordServer {
    private List<LandlordData> list = new ArrayList<>(54);
    public LandlordServer(){
        cardMake();
    }
    //随机派牌
    private void cardMake(){
        //花色
        char color;
        //记录三个玩家的牌数
        int flog = 0;
        //标记三张地主牌数
        int token = 0;
        //接收51张三个玩家的牌
        int[] array = randomPrime();
        //接收3张地主牌
        Set<Integer> set = randomThree();
        for (int i=0;i<4;i++){
            switch (i){
                case 0:
                    color = '♠';
                    break;
                case 1:
                    color = '♥';
                    break;
                case 2:
                    color = '♦';
                    break;
                default:
                    color = '♣';
            }
            sign:for (int j=0;j<13;j++){
                for (Integer in : set){
                    if (in==token){
                        list.add(new LandlordData(j,color,true,3));
                        token++;
                        continue sign;
                    }
                }
                list.add(new LandlordData(j,color,true,array[flog++]));
                token++;
            }
        }
        boolean b1 = false,b2 = false;
        for (Integer in : set){
            if (in==52){
                list.add(new LandlordData(13,' ',true,3));
                b1 = true;
            }
            if (in==53){
                list.add(new LandlordData(14,' ',true,3));
                b2 = true;
            }
        }
        if (!b1){
            list.add(new LandlordData(13,' ',true,array[flog++]));
        }
        if (!b2){
            list.add(new LandlordData(14,' ',true,array[flog]));
        }
    }

    //返回所有纸牌
    public List<LandlordData> getList() {
        return list;
    }

    //返回三张地主牌编号0-53
    private static Set<Integer> randomThree(){
        Set<Integer> set = new HashSet<>(3);
        while (set.size()<3){
            set.add((int)(Math.random()*54));
        }
        return set;
    }
    //递归返回长度51每人17张牌的人员标号数组
//    static int a=0,b=0,c=0;
//    static int[] array = new int[51];
//    private static void ran(int i){
//        int value = (int)(Math.random()*3);
//        if (i>=51){
//            return ;
//        }
//        switch (value) {
//            case 0:
//                if (a >= 17) {
//                    ran(i);
//                }
//                array[i++] = value;
//                a++;
//                ran(i+1);
//                break;
//            case 1:
//                if (b >= 17) {
//                    ran(i);
//                }
//                array[i++] = value;
//                b++;
//                ran(i+1);
//                break;
//            default:
//                if (c >= 17) {
//                    ran(i);
//                }
//                array[i++] = value;
//                c++;
//                ran(i+1);
//        }
//    }
    //返回三张地主牌标号

    //返回长度51每人17张牌的人员标号数组
    private int[] randomPrime(){
        int[] array = new int[51];
        int sum=0,a=0,b=0,c=0;
        flog:while (true){
            int value = (int)(Math.random()*3);
            if (sum>=51){
                return array;
            }
            switch (value) {
                case 0:
                    if (a >= 17) {
                        continue flog;
                    }
                    array[sum++] = value;
                    a++;
                    break;
                case 1:
                    if (b >= 17) {
                        continue flog;
                    }
                    array[sum++] = value;
                    b++;
                    break;
                default:
                    if (c >= 17) {
                        continue flog;
                    }
                    array[sum++] = value;
                    c++;
            }
        }
    }
}